package com.airlines.crewassignment.service.dict;

import java.util.Date;
import java.util.List;
import java.util.Map;

import com.airlines.base.entity.dict.Select2;

/**
 * @author xxxx
 * @date 2018年6月7日 
 * @description 下拉字典服务
 */
public interface Select2Service {
	/**
	 * 查询所有号位飞行员的教检学标志标识
	 * @return
	 */
	List<Select2> getPositionTsFlagF();

	/**
	 * 查询乘务员教检学标志
	 * @return
	 */
	List<Select2> getPositionTsFlagC();

	/**
	 * 查询飞行员的检查科目
	 * @return
	 */
	List<Select2> getPositionCheckThingF();

	/**
	 * 查询飞行员机组配置
	 * @return
	 */
	List<Select2> getCrewNumberType(String dutyCode);
	
	/**
	 * 获取所有机场的城市中文名下拉框选项
	 * @return
	 */
	List<Select2> getAirportCityCnName();
	
	/**
	 * 获取所有机场的城市简称下拉框选项
	 * @return
	 */
	List<Select2> getAirportCityAbbr();
	
	/**
	 * 从下拉框中选择ID值对应的Text值
	 * 有且只有一个时，才会返回Text值，如果查询出多个，或则0个，则返回 null
	 * @param list
	 * @param id
	 * @return
	 */
	String getText(List<Select2> list,String id);
	
	/**
	 * 将list中的某一列的id，转换为select2对应的下拉框value
	 * @param list
	 * @param idColumnName
	 * @param valueColumnName
	 * @param selectList
	 * @return
	 */
	<T> List<T> convert(List<T> list, String idColumnName,String valueColumnName, List<Select2> selectList);
	
	/**
	 * 通过cglib动态代理技术,转换list中的key值为value值,此方法一次转换一个select2对应的属性
	 * 注意，自动添加的属性名称为idColumnName+"_Name"
	 * @param list
	 * @param idColumnName
	 * @param selectList
	 * @return
	 */
	<T> List<T> convert(List<T> list, String idColumnName, List<Select2> selectList);
	
	/**
	 * 通过cglib动态代理技术,转换list中的key值为value值,此方法一次转换多个select2对应的属性
	 * 注意，自动添加的属性名称为idColumnName+"_Name"
	 * @param list
	 * @param selectMap
	 * @return
	 */
	<T> List<T> convert(List<T> list, Map<String,List<Select2>> selectMap);


	/**
	 * 查询所有机组人员的工号
	 * @return
	 */
	List<Select2> getCrewName();

	/**
	 * 获取授权码
	 * @return
	 */
	List<Select2> getTechNoZ(String techType);
	/**
	 * 获取是否
	 * @return
	 */
	List<Select2> getYandN();

	/**
	 * 查询某段时间内所有的航班号+起飞目的机场，不重复的,不包含取消的,正班的
	 * @param flightDateStart
	 * @param flightDateEnd
	 * @return
	 */
	List<Select2> getFlightNoList(Date flightDateStart, Date flightDateEnd);

	/**
	 * 获取机上岗位
	 * @param rankFlag
	 * @return
	 */
	List<Select2> getFlightPosition(String rankFlag);

	/**
	 * 通过dictionaryCode获取字典中的列表
	 * @param dictionaryCode
	 * @return
	 */
	List<Select2> getSelect2(String dictionaryCode);
}
